1. Field of Invention
The present invention relates generally to the art of resource allocation during startup by a storage system controller.
2. Description of Related Art
RAID (Redundant Array of Independent Disks) is a storage system used to increase performance and provide fault tolerance. RAID is a set of two or more hard disks and a specialized disk controller that contains the RAID functionality. RAID improves performance by disk striping, which interleaves bytes or groups of bytes across multiple drives, so more than one disk is reading and writing simultaneously (e.g., RAID 0). Fault tolerance is achieved by mirroring or parity. Mirroring is 100% duplication of the data on two drives (e.g., RAID 1).
A volume in storage may be a logical storage unit, and in a RAID system is typically part of one physical hard drive or one that spans several physical hard drives. An “enclosure” in the computer data storage context is a physical collection of storage drives, typically arranged by physical unit number rather than a logical unit number. Logical unit number (LUN) is the number assigned to a logical unit of a storage drive; a logical unit is a SCSI protocol entity.
A Storage Area Network (SAN) often connects multiple servers to a centralized pool of disk storage. A SAN can treat all the storage as a single resource, improving disk maintenance and backups. In some SANs, the disks themselves can copy data to other disks for backup without any computer processing overhead. The SAN network allows data transfers between computers and disks at high peripheral channel speeds.
A boot sector is one or more reserved sectors on disk that are used to load the operating system of a computer. On startup, the computer looks for the master boot record (MBR) or something similarly named, which is typically the first sector in the first partition of the disk, and contains the program that reads the partition table which points to the first sector that contains the operating system. That sector contains another small program that causes the computer to read the operating system. Often these programs are referred to as images, as in binary data images comprised of 0s and 1s.
SAS, or Serial Attached SCSI, is a serial version of the SCSI interface. SAS was ratified by ANSI in 2003. SAS is a point-to-point architecture that uses a disk controller (host bus adapter) with four or more channels that operate simultaneously. SAS also supports Serial ATA (SATA) drives, which can be mixed with SAS drives.
Memory allocation used as a verb is reserving memory for specific purposes. Operating systems and applications generally reserve fixed amounts of memory at startup and allocate more when the processing requires it. Configuring memory is the process of memory allocation, typically on startup; a memory configuration (or a memory allocation) is the particular state or characteristics of memory after the act of memory allocation (e.g. the size, type, speed and the like of memory).
Virtual memory in the context of the present field of the invention is the mapping within the processor's view of the memory and physical memory space is the mapping on the bus to which the various chip cores are attached.
Resources include any data, hardware, software or other construct important in hard drive controller cards or chips. By way of example, a resource could be cached memory, physical ports, phys (hardware interfacing a link layer device or MAC to a physical medium) and the like. The resources consume memory. The resource is a way to describe how many of a particular type of thing the firmware supports, such as number of targets, number of initiators and the like, where targets and initiators consume resources.
Start of Day (SOD) is the time from PCI or chip reset to the time that firmware is ready to respond to non-configuration space or other than config space (non-configspace) accesses. SOD is a time. SOD is the time from the moment after the reset deasserts and the processor starts running until the firmware is ready to accept memory accesses (non-configspace) from PCIe. More generally, it is during this time that a test finds what memory is available for resources to be allocated in memory, permanently (or until the next power cycle/reboot). Memory allocated during SOD is not available later on during the same power cycle.
The following acronyms are used in the description of the present invention: IRI (Integrated RAID Interface), IOP (IO Processor), IOPI (IOP Interface), PLI (Protocol Layer Interface), SOD (Start of Day), and IOC (IO Controller, for a single driver controller instance). SSP stands for Serial SCSI Protocol and SMP stands for Serial Management Protocol. I/O or IO generally refers to Input/Output, or the transferring of data between the CPU and a peripheral device. In the storage context, a hard drive or other secondary memory storage vehicle can be thought of from the controller card or chip's point of view as comprising a plurality of IO's, which collectively form the storage, and each comprising a unique address that can be reached by the microprocessor on the chip. Such plurality of IO's are often terms “host credits” or “global credits”, and can typically be around 64 k in memory size and can number several thousand. A “host” can be any piece of hardware making a communications request from another piece of hardware, called the “target”, while an “initiator” can be a host that starts an IO data transfer, e.g., a hard drive controller card or chip. The “host” talks to a storage controller which may be a SCSI target or a SCSI Initiator. Frame or message frame, in communications, refers to a fixed block of data transmitted as a single entity. Hexadecimal (HEX) is the mathematical radix base (power of 16). PBSRAM stands for Pipelined Burst Synchronous RAM. Fibre Channel (FC) is a high-speed transport technology used to build storage area networks (SANs).
In the existing art in storage products, firmware needs to expand to maximize the use of memories found in a given system; adjust to the needs of various architectures with differing hardware and hardware requirements, including but not limited to DMA capability, speed and advanced memory features (e.g. tightly coupled memory, data catch et. al), and to account for different memory type capabilities. Further, since current configurations are fixed, releases become complicated due to the need to create multiple fixed builds based on target hardware, customer demands and other parameters. The parameters vary based upon application. Some other parameters may include frame size (buffers used for communication), debug resource allocation (buffers in general), virtual functions and virtualization resources (zero if off, non-zero if on) and the like, as is obvious to one of ordinary skill from the teachings herein.
Existing solutions to the problem of configuring storage products at boot up during runtime include having multiple fixed configurations, with one firmware configuration for each target system. The existing solutions are not desirable due to the complex maintenance required to maintain the different configurations due to hardware revisions, vendor changes and other parameters.
A FC (Fibre Channel) modification of existing solutions includes having a fixed array of parameters as structures which are assessed via various configuration parameters and a single fixed memory size. Although this is more flexible than having multiple builds for fixed configurations, nevertheless, this existing solution is not programmable by the user and does not adjust itself to varying memory configurations and sizes, like the present invention.
In existing art solutions maintenance of multiple builds requires a great deal of work to track all the differing build parameters, verify they are correct, and test each build. Further, once the builds are created, applications have to ensure that the correct images are programmed on the correct devices with similar features. For example, in these existing solutions RAID firmware should not be programmed over ordinary controller firmware.
While these above mentioned FC existing implementations are better than what came before, they can only support a limited number of configurations based upon input parameters. As the number of protocols, memory types and sizes increases, the amount of storage necessary to maintain the array of structures offered by these existing solutions grows, and becomes difficult to maintain due to the constant instantiation of the data required. Further, none of these existing solutions supports the capability to handle varying memory configurations and types.
What is lacking in the prior art is a method and apparatus for an improved system to allocate resources flexibly, and which can be used to allocate resources without expert input, automatically and programically, as required by storage systems firmware, such as taught in the present invention.